Understanding the difficulty of training deep feedforward neural networks

讲解神经网络训练难得原因,提出Xavier权重初始化方法

概要

神经网络难以训练,作者想要读者更好理解:为什么梯度下降法不适用随机初始化权重的神经网络,且怎么设计更好的初始化方法。

作者发现随机化初始化权重时,不适合使用sigmod作为激活函数,因为它均值不为零,前面的hidden layer容易饱和;令人惊讶的时饱和的神经元可以自动变为不饱和,尽管过程很慢。

作者通过观察不同层的激活函数和梯度,提出了新的权重初始化方法,可以更快的是网络收敛。

Sigmod实验

bias初始化为零,权重初始化

$$ W_{ij} \sim U[-\frac{1}{\sqrt n},\frac{1}{\sqrt n}] $$

$n$表示前一层的size(即前一层权重W的列数)

下图是5层网络中,4个隐藏层的激活值随epoc的变化:

2_01.jpg

通过图片可以看到,最后的隐藏层很快饱和,但是在epoch 100左右,又开始变为不饱和。其它几层的均值大概为0.5,随着训练进行开始变小。

上面这种情况很可能是因为随机初始化权重引起的。输出层为$softmax(b+Wh)$,这样的话,输出的结果更加依赖$b$(因为h饱和,接近为0),bias学习速度将会比$h$快。梯度误差将会使$Wh$向零靠近,造成前面的层学习不到有用的特征。这样训练的网络质量差,泛化性能差。

作者还对比了使用不同激活函数的情况。

代价函数的影响

在逻辑回归或似然估计时,使用softmax输出,cost function为对数函数$-logP(y|x)$比二次代价函数要好。一个2层网络,代价函数随两层网络权重变化如图:

2_02.jpg

交叉熵代价函数是黑色,二次型代价函数是红色;$W_1$和$W_2$分别表示两层的权重。可以看出二次型代价函数有明显的“平”的区域。

权重初始化

为了便于研究,假设使用线性激活函数$f(x)$,且在零点导数$f’(x)=1$。

对于一层网络

$$ f(\textbf x) = \sum_i^n w_ix_i + b $$

输出的方差
$$ Var(f(\textbf x)) = \sum_i^n Var(w_i x_i) $$

其中
$$ Var(w_i x_i) = E[w_i]^2Var(x_i) + E[x_i]^2Var(w_i)+Var(w_i)Var(x_i)\\ 因为:E[x_i] = E[w_i] = 0\\ Var(w_i x_i) =Var(w_i)Var(x_i) $$
由于$w$和$x$独立同分布
$$ Var(f(\textbf x)) = n Var(w_i) Var(x_i) $$

假设$\textbf z^i$是第$i$层的输入向量,$\textbf s^i$是第$i$层激活函数的输入

$$ \textbf s^i = \textbf z^i W^i + \textbf b^i \\ \textbf z^{i+1} = f(\textbf s^i) $$

可以得到
$$ \frac{\partial Cost}{\partial s_k^i} = f'(s_k^i) W_{k,\cdot}^{i+1} \frac{\partial Cost}{\partial s^{i+1}} \\ \frac{\partial Cost}{\partial w_{l,k}^i} = z_l^i \frac{\partial Cost}{\partial s_k^i} $$

假设第$i$层的大小为$n_i$,网络输入为$x$

$$ f'(s_k^i) \approx 1\\ Var[z^i] = Var[x] \prod_{i'=0}^{i-1}n_{i'} Var[W^{i'}] $$

其中$Var[W^{i’}]$表示第$i’$层的共享权重的方差,对于$d$层的网络
$$ Var[\frac{\partial Cost}{\partial s^i}]=Var[\frac{\partial Cost}{\partial s^d}] \prod_{i'=i}^{d}n_{i'+1} Var[W^{i'}] \\ Var[\frac{\partial Cost}{\partial w^i}]= \prod_{i'=0}^{i-1}n_{i'} Var[W^{i'}] \prod_{i'=i}^{d-1}n_{i'+1} Var[W^{i'}] \times Var[x] Var[\frac{\partial Cost}{\partial s^d}] $$

对于前向传播
$$ \forall (i,i'), Var[z^i] = Var[z^{i'}] $$

对于反向传播:
$$ \forall (i,i'), Var[\frac{\partial Cost}{\partial s^i}] = Var[\frac{\partial Cost}{\partial s^{i'}}] $$

因此得到:
$$ \forall i, \quad n_i Var[W^i] = 1\\ \forall i, \quad n_{i+1} Var[W^i] = 1 $$

一个层的输入输出一般不相同,作为折中
$$ \forall i, \quad Var[W^i] = \frac{2}{n_i + n_{i+1}} $$

对于
$$ W \sim U[-\frac{1}{\sqrt n},\frac{1}{\sqrt n}] \\ Var(W) = \frac{1}{3n} $$

因此得到初始化权重:
$$ W \sim U[-\frac{\sqrt 6}{\sqrt {n_j + n_{j+1}}},\frac{\sqrt 6}{\sqrt {n_j + n_{j+1}}}] $$

文章目录
  1. 1. 概要
  2. 2. Sigmod实验
  3. 3. 代价函数的影响
  4. 4. 权重初始化
,
#add by kangyabing